package com.hankol.message.imConfig

import android.content.Context
import android.graphics.Color
import android.text.Spannable
import android.text.SpannableString
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.TextView
import com.baselibrary.MessageBus
import com.baselibrary.extension.buildSpannableString
import com.baselibrary.extension.checkValue
import com.baselibrary.extension.foregroundColorSpan
import com.hankol.message.R
import io.rong.imkit.conversation.messgelist.provider.BaseMessageItemProvider
import io.rong.imkit.model.UiMessage
import io.rong.imkit.widget.adapter.IViewProviderListener
import io.rong.imkit.widget.adapter.ViewHolder
import io.rong.imlib.model.MessageContent
import io.rong.imlib.RongIMClient
import com.baselibrary.extension.checkNotNull
import com.baselibrary.manager.SensorsDataManager
import com.baselibrary.utils.*
import com.hankol.message.HKIMUtils
import com.hankol.message.bean.FriendStateMessage
import io.rong.imkit.IMCenter
import io.rong.imlib.model.Conversation
import io.rong.imlib.model.Message
import io.rong.message.TextMessage


/*好友关系.
 * 【TA不是好友，不能进行聊天  查看】
【由于对方没有关注你，限制发送3条消息】
【你没有关注TA，不能进行聊天 一键关注】
* */
class FriendStateMessageProvider : BaseMessageItemProvider<FriendStateMessage>() {


    init {
        this.mConfig.showReadState = false //单聊会话中是否在消息旁边显示已读回执状态。
        this.mConfig.showPortrait = false //表示不显示头像
        this.mConfig.centerInHorizontal = true // 表示居中显示
        this.mConfig.showProgress = false //表示不显示发送进度
        this.mConfig.showSummaryWithName = false //表示 会话页面不在消息上面显示昵称
        this.mConfig.showContentBubble = false //是否需要展示气泡

    }

    /**
     * @param holder ViewHolder
     * @param t 自定义消息
     * @param uiMessage {@link UiMessage}
     * @param position 位置
     * @param list 列表数据
     * @param listener ViewModel 的点击事件监听器。如果某个子 view 的点击事件需要 ViewModel 处理，可通过此监听器回调。
     * @return 点击事件是否被消费
     */
    override fun onItemClick(p0: ViewHolder?, p1: FriendStateMessage?, p2: UiMessage?, p3: Int, p4: MutableList<UiMessage>?, p5: IViewProviderListener<UiMessage>?): Boolean {
        return false
    }

    override fun isMessageViewType(messageContent: MessageContent?): Boolean {
        return messageContent is FriendStateMessage && !messageContent.isDestruct
    }

    override fun onCreateMessageContentViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val v = LayoutInflater.from(parent.context).inflate(R.layout.layout_message_friend_state, parent, false)
        return ViewHolder(parent.context, v)
    }

    /**
     * 设置消息视图里各 view 的值
     * @param holder ViewHolder
     * @param parentHolder 父布局的 ViewHolder
     * @param t 此展示模板对应的消息
     * @param uiMessage {@link UiMessage}
     * @param position 消息位置
     * @param list 列表
     * @param listener ViewModel 的点击事件监听器。如果某个子 view 的点击事件需要 ViewModel 处理，可通过此监听器回调。
     */
    override fun bindMessageContentViewHolder(holder: ViewHolder, parentHolder: ViewHolder, message: FriendStateMessage, uiMessage: UiMessage, position: Int, list: List<UiMessage>, listener: IViewProviderListener<UiMessage>) {
        val tvTip = holder.getView<TextView>(R.id.tv_tip)
        var msgType = 0
        if (uiMessage.extra.checkNotNull()) {
            msgType = uiMessage.extra.toInt()
        } else {
            msgType = message.type
        }
        var tipStr = ""
        var range: IntRange = 0..0
        //* 0=没关系
        //* 1=自己
        //* 2=我关注了他
        //* 3=他关注了我
        //* 4=互相关注
        when (msgType) {
            2 -> {
                tipStr = "由于对方没有关注你，限制发送3条消息"
                range = 0..0
            }
            0, 3 -> {
                tipStr = "你没有关注TA，不能进行聊天 "
                range = tipStr.length - 4..tipStr.length
            }
            4 -> {
                tipStr = ""
                range = 0..0
            }
        }
        tvTip.setText(SpannableString(tipStr.foregroundColorSpan(range, Color.parseColor("#F54D53"))))
        tvTip.buildSpannableString {
            addText("${tipStr}")
            if (msgType == 0 || msgType == 3) {
                addText("一键关注") {
                    setColor("#F54D53")
                    onClick(false, onClick = {
                        SensorsDataManager.instance.onKeyFollow()

                        //更新扩展信息
                        RongIMClient.getInstance().setMessageExtra(uiMessage.messageId, "4", object : RongIMClient.ResultCallback<Boolean>() {
                            override fun onSuccess(p0: Boolean?) {
                                tvTip.setText("")
                                val msgids = mutableListOf<Int>()
                                list.forEachIndexed { index, uiMessage ->
                                    if (uiMessage.content is FriendStateMessage) {
                                        msgids.add(uiMessage.messageId)
                                    }
                                }
                                val intArray = IntArray(msgids.size)
                                msgids.forEachIndexed { index, i ->
                                    intArray.set(index, i)
                                }
                                IMCenter.getInstance().deleteMessages(Conversation.ConversationType.PRIVATE, uiMessage.targetId.checkValue(), intArray, object : RongIMClient.ResultCallback<Boolean>() {
                                    override fun onSuccess(t: Boolean?) {
                                        EventBusUtils.sendNotify1Value(MessageBus.one_key_follow, uiMessage.targetId.checkValue())
                                        val msg = TextMessage("我们已经成为好友，开始聊天吧")
                                        msg.content = "我们已经成为好友，开始聊天吧"
                                        msg.extra = "4"
                                        val tmsg = Message.obtain(uiMessage.targetId.checkValue(), Conversation.ConversationType.PRIVATE, msg)
                                        HKIMUtils.sendMsg(tmsg, 0)
                                    }

                                    override fun onError(e: RongIMClient.ErrorCode?) {
                                        HKLogUtils.e("====删除消息onError===========${e.toString()}==")
                                    }
                                })
                            }

                            override fun onError(p0: RongIMClient.ErrorCode?) {
                            }
                        })
                    })
                }
            }
        }
        //        val view = holder.getView(R.id.rc_text) as TextView
        //
        //        view.setOnClickListener(object : View.OnClickListener {
        //            override fun onClick(view: View) {
        //                val parent = view.getParent()
        //                if (parent is View) {
        //                    (parent as View).performClick()
        //                }
        //
        //            }
        //        })
        //        view.setOnLongClickListener(object : OnLongClickListener {
        //            override fun onLongClick(view: View): Boolean {
        //                val parent = view.getParent()
        //                return if (parent is View) (parent as View).performLongClick() else false
        //            }
        //        })
    }

    /**
     * 在会话列表页某条会话最后一条消息为该类型消息时，会话里需要展示的内容。
     * 比如: 图片消息在会话里需要展示为"图片"，那返回对应的字符串资源即可。
     * @param context 上下文
     * @param t 消息内容
     * @return 会话里需要展示的字符串资源
     */
    override fun getSummarySpannable(context: Context, message: FriendStateMessage?): Spannable {
        var str = "[提示]"
        return SpannableString(str.foregroundColorSpan(0..str.length, Color.parseColor("#F54D53")))
        /*        var spannableString = SpannableString("分享[动态]")
                spannableString.setSpan(ForegroundColorSpan(Color.parseColor("#F54D53")), 2, 4, 0);
                return spannableString*/

        /*  if (message != null && !TextUtils.isEmpty(message!!.getContent())) {
              var content = message!!.getContent()
              content = content.replace("\n", " ")
              if (content.length > 100) {
                  content = content.substring(0, 100)
              }

              return SpannableString(AndroidEmoji.ensure(content))
          } else {
              return SpannableString("")
          }*/
    }

    override fun bindViewHolder(holder: ViewHolder?, uiMessage: UiMessage?, position: Int, list: MutableList<UiMessage>?, listener: IViewProviderListener<UiMessage>?) {
        super.bindViewHolder(holder, uiMessage, position, list, listener)
        holder?.setText(R.id.rc_time, TimeUtil.fromToday(uiMessage?.sentTime))
    }
}
